﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace CastleDefender.Platform
{
    public partial class Animation2D : GameObject
    {
        #region VARIABLE

        protected TimeSpan tsElapsedTimeChangeFrame;
        protected int intTimeSpan;
        protected bool blnAction;
        protected bool blnIsStatic;
        protected bool blnAllFrame;
        
        #endregion

        #region CONSTRUCTOR

        public Animation2D(Game myGame, ref Texture2D texture, int widthFrame, int heightFrame,bool isStatic,bool allFrame, Vector2 position, int timeSpan)
            : base(myGame, ref texture, widthFrame, heightFrame)
        {
            vecPosition = position;
            tsElapsedTimeChangeFrame = TimeSpan.Zero;
            intTimeSpan = timeSpan;
            blnIsStatic = isStatic;
            blnAllFrame = allFrame;
            intState = 0;
            intActiveFrame = 0;
            blnAction = true;
            recBounds = new Rectangle((int)vecPosition.X, (int)vecPosition.Y, intWidthFrame, intHeightFrame);
        }
        #endregion

        #region PUBLIC METHOD

        public override void Update(GameTime gameTime)
        {
            //Thay đổi frame hình khi cờ hiệu Action là true
            if (blnAction && !blnIsStatic)
            {
                //Sau một khoảng thời gian thì thay đổi frame hình
                tsElapsedTimeChangeFrame += gameTime.ElapsedGameTime;
                if (tsElapsedTimeChangeFrame > TimeSpan.FromMilliseconds(intTimeSpan))
                {
                    tsElapsedTimeChangeFrame -= TimeSpan.FromMilliseconds(intTimeSpan);

                    //Tăng frame theo cột
                    ActiveFrame++;
                    if (ActiveFrame == frames[State].Count)
                    {
                        //Nếu biến allframe là true thì hiệu ứng trên toàn bộ frame hình
                        if (blnAllFrame)
                        {
                            intState++;
                            if (intState == frames.Count)
                            {
                                intState = 0;

                            }
                        }

                        ActiveFrame = 0;
                    }
                }
            }

            if(!blnAction)
            {
                intState = 0;
                intActiveFrame = 0;
            }

            base.Update(gameTime);
        }
        #endregion

        #region PUBLIC PROPERTIES

        //Nhận trả giá trị tsTimeSpan
        public int TimeSpanAnimation
        {
            get { return intTimeSpan; }
            set { intTimeSpan = value; }
        }

        #endregion

    }
}
